##### Iteradores e Geradores #####

import cartao

class CartaoIterador(cartao.Cartao):
    def __init__(self, numero = '', nome = ''):
        '''
        construtor
        '''
        cartao.Cartao.__init__(self, numero, nome)
        cartao.Cartao(numero, nome)
        self.index_nome = 0

    def __iter__(self):
        return self

    def next(self):
        if self.index_nome >= len(self.nome):
            raise StopIteration
        x = self.nome[self.index_nome]
        self.index_nome += 1

        return reduce(lambda a , b: a+b, [ ' ' for k in range(self.index_nome)]) + ' ' + x

        pass

def lista_salta_em_2(lista):
    '''
    com geradores simplifica-se a criacao de iteradores
    '''
    index = 0
    while index < len(lista):
         yield lista[index]
         index += 2

def teste():
    obj1 = CartaoIterador('123456789', 'Manuel Jardim')
    print obj1.nome

    # e agora uso do iterador sobre o nome
    for x in obj1:
        print x

    lista = range(0, 20)

    for x in lista_salta_em_2(lista):
        print x
    pass

teste()


